PDA

Просмотр полной версии : [Вопрос] Не выдается админка.



kala4iks
13.10.2016, 15:24
Добрый день столкнулся с такой броблемой раньше админка выдавалась через /makeadmin Ник игрока ур админки, теперь я переделал под /makeadmin id игрока ур.админки но админка не выдается.


CMD:makeadmin(playerid,params[])
{
new playername[24],admin_level,string[128];
if(sscanf(params,"s[24]i",playername,admin_level))return send(playerid,0x00BFFFAA,"[ÊÎÌÀÍÄÛ] {FFFFFF}/makeadmin [Íèê èãðîêà] [Óð.àäìèíêè].");
f(string,"SELECT * FROM "T_ADMIN" WHERE `name` = '%s'",playername);
mysql_tquery(dbHandle,string,"SetAdmin","isi",playerid,playername,admin_level);
return 1;
}



forward SetAdmin(playerid, name[], level);
public SetAdmin(playerid, name[], level)
{
new rows, fields, string[256];
if(cache_get_row_count(dbHandle) > 0)
{
cache_get_data(rows, fields);
if(rows)
{
if(!level)
{
if(GetPlayerID(name) != INVALID_PLAYER_ID) PI[GetPlayerID(name)][pAdmin] = 0;
mysql_format(dbHandle, string, sizeof(string), "DELETE FROM "T_ADMIN" WHERE `name`='%s'", name);
mysql_tquery(dbHandle, string, "", "");
mysql_format(dbHandle, string, sizeof(string), "UPDATE "T_ACCOUNTS" SET `admin` = '0' WHERE `name` = '%s'", name);
mysql_tquery(dbHandle, string, "", "");
format(string, sizeof(string), "Вы сняли %s с должности администратора", name);
SendClientMessage(playerid, COLOR_YELLOW, string);
format(string, sizeof(string), "%s снял %s с должности администратора", GetName(playerid), name);
SendLog("DeleteAdmin", string);
}
else
{
if(GetPlayerID(name) != INVALID_PLAYER_ID) PI[GetPlayerID(name)][pAdmin] = level;
mysql_format(dbHandle, string, sizeof(string), "UPDATE "T_ADMIN" SET `level` = '%d' WHERE `name` = '%s' LIMIT 1", level, name);
mysql_tquery(dbHandle, string, "", "");
format(string, sizeof(string), "Вы установили уровень администратора %s на %i", name, level);
SendClientMessage(playerid, COLOR_YELLOW, string);
format(string, sizeof(string), "%s установил уровень администратора %s на %i", GetName(playerid), name, level);
SendLog("EditAdmin", string);
}
}
else
{
if(!level) return SendClientMessage(playerid, COLOR_GREY, "Игрок не администратор");
new data[15];
getdate(years, months, days);
format(data, sizeof(data), "%02d.%02d.%04d", days, months, years);
mysql_format(dbHandle, string, sizeof(string), "INSERT INTO "T_ADMIN" (`name`, `level`, `last_connect`, `put_admin`, `data`) VALUES ('%s', %d, '%s', '%s', '%s')", name, level, data, GetName(playerid), data);
mysql_tquery(dbHandle, string, "", "");
format(string, sizeof(string), "%s добавлен в список администрации. Уровень полномочий %i", name, level);
SendClientMessage(playerid, COLOR_GREEN, string);
format(string, sizeof(string), "%s добавил в список администрации %s (%i уровень)", GetName(playerid), name, level);
SendLog("SetAdmin", string);
if(GetPlayerID(name) != INVALID_PLAYER_ID)
{
format(string, sizeof(string), "%s назначил Вас администратором", GetName(playerid));
SendClientMessage(GetPlayerID(name), COLOR_YELLOW, string);
}
}
}
else SendClientMessage(playerid,0xFF0000AA,"[ОШИБКА] {FFFFFF}Этот игрок не в сети.");
return 1;
}



CMD:makeadmin(playerid,params[])
{
new string[128],rows,fields;
if(sscanf(params,"ri",params[0],params[1]))return send(playerid,0x00BFFFAA,"[КОМАНДЫ] {FFFFFF}/makeadmin [id игрока] [админка].");
if(params[1] > 10 || params[1] < 1)return send(playerid,0xFF0000AA,"[ОШИБКА] {FFFFFF}Доступные уровни админки от 1 до 10.");
if(!IsPlayerConnected(params[0]))return Notonline;
if(cache_get_row_count(dbHandle) > 0)
{
cache_get_data(rows, fields);
if(rows)
{
if(params[1])
{
new data[15];
getdate(years, months, days);
format(data, sizeof(data), "%02d.%02d.%04d", days, months, years);
mysql_format(dbHandle, string, sizeof(string), "INSERT INTO "T_ADMIN" (`name`, `level`, `last_connect`, `put_admin`, `data`) VALUES ('%s', %d, '%s', '%s', '%s')", GetName(params[0]), params[1], data, GetName(playerid), data);
mysql_tquery(dbHandle, string, "", "");
format(string, sizeof(string), "%s добавлен в список администрации. Уровень полномочий %i", params[0], params[1]);
SendClientMessage(playerid, COLOR_GREEN, string);
format(string, sizeof(string), "%s добавил в список администрации %s (%i уровень)", GetName(playerid), params[0], params[1]);
}
else
{
PI[params[0]][pAdmin] = params[1];
mysql_format(dbHandle, string, sizeof(string), "UPDATE "T_ADMIN" SET `level` = '%d' WHERE `name` = '%s' LIMIT 1", params[1], GetName(params[0]));
mysql_tquery(dbHandle, string, "", "");
format(string, sizeof(string), "Вы установили уровень администратора %s на %i", params[0], params[1]);
SendClientMessage(playerid, COLOR_YELLOW, string);
format(string, sizeof(string), "%s установил уровень администратора %s на %i", GetName(playerid), params[0], params[1]);
SendLog("EditAdmin", string);
}
}

}
return 1;
}

kala4iks
14.10.2016, 12:39
Выручайте

vovandolg
14.10.2016, 15:12
if(GetPlayerID(name) != INVALID_PLAYER_ID) PI[GetPlayerID(name)][pAdmin] = 0;
Эта строка не даст повесить админку на человека если он будет оффлайн

UPD: Далее ты в БД всё же загрузил ему lvl, но тут ещё вопрос возникает, а не стоит ли у тебя сейв при выходе,
и тут момент, у тебя на сервере он как ноль, а в БД записался, но ты ведь не загрузил с БД а перезаписал на ноль

DeimoS
14.10.2016, 17:23
if(!IsPlayerConnected(params[0]))return Notonline;
if(cache_get_row_count(dbHandle) > 0)

Может стоит сначала отправить запрос, а потом уже работать с данными из БД, а не пытаться сразу работать с какими-то данными?

И да, IsPlayerConnected тут не нужна. "r" вернёт INVALID_PLAYER_ID, если игрок оффлайн. Такая проверка будет лучше

if(params[0] == INVALID_PLAYER_ID) return Notonline;

kala4iks
25.10.2016, 22:16
Вот я обновил команду в базу данных админ записуется, а в аккаунт игрока уровень не выдается.


CMD:makeadmin(playerid,params[])
{
new string[128];
if(sscanf(params,"ri",params[0],params[1]))return send(playerid,0x00BFFFAA,"[КОМАНДЫ] {FFFFFF}/makeadmin [id игрока] [админка].");
if(params[1] > 10 || params[1] < 1)return send(playerid,0xFF0000AA,"[ОШИБКА] {FFFFFF}Доступные уровни админки от 1 до 10.");
if(!IsPlayerConnected(params[0]))return Notonline;
if(PI[params[0]][pAdmin] != 0)
{
PI[params[0]][pAdmin] = params[1];
mysql_format(dbHandle, string, sizeof(string), "UPDATE "T_ADMIN" SET `level` = '%d' WHERE `name` = '%s' LIMIT 1", params[1], GetName(params[0]));
mysql_tquery(dbHandle, string, "", "");
f(string,"Вы установили уровень администратора %s на %i", params[0], params[1]);
send(playerid, COLOR_YELLOW, string);
}
else
{
new data[15];
getdate(years, months, days);
PI[params[0]][pAdmin] = params[1];
format(data, sizeof(data), "%02d.%02d.%04d", days, months, years);
mysql_format(dbHandle, string, sizeof(string), "INSERT INTO "T_ADMIN" (`name`, `level`, `last_connect`, `put_admin`, `data`) VALUES ('%s', %d, '%s', '%s', '%s')", GetName(params[0]), params[1], data, GetName(playerid), data);
mysql_tquery(dbHandle, string, "", "");
format(string, sizeof(string), "%s добавлен в список администрации. Уровень полномочий %i", GetName(params[0]), params[1]);
SendClientMessage(playerid, COLOR_GREEN, string);
format(string, sizeof(string), "%s добавил в список администрации %s (%i уровень)", GetName(playerid), params[0], params[1]);
}
return 1;
}

Strong
25.10.2016, 23:49
Вот я обновил команду в базу данных админ записуется, а в аккаунт игрока уровень не выдается.


CMD:makeadmin(playerid,params[])
{
new string[128];
if(sscanf(params,"ri",params[0],params[1]))return send(playerid,0x00BFFFAA,"[КОМАНДЫ] {FFFFFF}/makeadmin [id игрока] [админка].");
if(params[1] > 10 || params[1] < 1)return send(playerid,0xFF0000AA,"[ОШИБКА] {FFFFFF}Доступные уровни админки от 1 до 10.");
if(!IsPlayerConnected(params[0]))return Notonline;
if(PI[params[0]][pAdmin] != 0)
{
PI[params[0]][pAdmin] = params[1];
mysql_format(dbHandle, string, sizeof(string), "UPDATE "T_ADMIN" SET `level` = '%d' WHERE `name` = '%s' LIMIT 1", params[1], GetName(params[0]));
mysql_tquery(dbHandle, string, "", "");
f(string,"Вы установили уровень администратора %s на %i", params[0], params[1]);
send(playerid, COLOR_YELLOW, string);
}
else
{
new data[15];
getdate(years, months, days);
PI[params[0]][pAdmin] = params[1];
format(data, sizeof(data), "%02d.%02d.%04d", days, months, years);
mysql_format(dbHandle, string, sizeof(string), "INSERT INTO "T_ADMIN" (`name`, `level`, `last_connect`, `put_admin`, `data`) VALUES ('%s', %d, '%s', '%s', '%s')", GetName(params[0]), params[1], data, GetName(playerid), data);
mysql_tquery(dbHandle, string, "", "");
format(string, sizeof(string), "%s добавлен в список администрации. Уровень полномочий %i", GetName(params[0]), params[1]);
SendClientMessage(playerid, COLOR_GREEN, string);
format(string, sizeof(string), "%s добавил в список администрации %s (%i уровень)", GetName(playerid), params[0], params[1]);
}
return 1;
}


CMD:makeadmin(playerid,params[])
{
new string[128];
if(sscanf(params,"ri",params[0],params[1]))return send(playerid,0x00BFFFAA,"[КОМАНДЫ] {FFFFFF}/makeadmin [id игрока] [админка].");
if(params[1] > 10 || params[1] < 1)return send(playerid,0xFF0000AA,"[ОШИБКА] {FFFFFF}Доступные уровни админки от 1 до 10.");
if(!IsPlayerConnected(params[0]))return Notonline;
if(PI[params[0]][pAdmin] != 0)
{
PI[params[0]][pAdmin] = params[1];
mysql_format(dbHandle, string, sizeof(string), "UPDATE "T_ADMIN" SET `level` = '%d' WHERE `name` = '%s' LIMIT 1", params[1], GetName(params[0]));
mysql_format(dbHandle, string, sizeof(string), "UPDATE "Account" SET `Admin` = '%d' WHERE `name` = '%s' LIMIT 1", params[1], GetName(params[0]));
mysql_tquery(dbHandle, string, "", "");
f(string,"Вы установили уровень администратора %s на %i", params[0], params[1]);
send(playerid, COLOR_YELLOW, string);
}
else
{
new data[15];
getdate(years, months, days);
PI[params[0]][pAdmin] = params[1];
format(data, sizeof(data), "%02d.%02d.%04d", days, months, years);
mysql_format(dbHandle, string, sizeof(string), "INSERT INTO "T_ADMIN" (`name`, `level`, `last_connect`, `put_admin`, `data`) VALUES ('%s', %d, '%s', '%s', '%s')", GetName(params[0]), params[1], data, GetName(playerid), data);
mysql_tquery(dbHandle, string, "", "");
format(string, sizeof(string), "%s добавлен в список администрации. Уровень полномочий %i", GetName(params[0]), params[1]);
SendClientMessage(playerid, COLOR_GREEN, string);
format(string, sizeof(string), "%s добавил в список администрации %s (%i уровень)", GetName(playerid), params[0], params[1]);
}
return 1;
}

kala4iks
26.10.2016, 14:52
CMD:makeadmin(playerid,params[])
{
new string[128];
if(sscanf(params,"ri",params[0],params[1]))return send(playerid,0x00BFFFAA,"[КОМАНДЫ] {FFFFFF}/makeadmin [id игрока] [админка].");
if(params[1] > 10 || params[1] < 1)return send(playerid,0xFF0000AA,"[ОШИБКА] {FFFFFF}Доступные уровни админки от 1 до 10.");
if(!IsPlayerConnected(params[0]))return Notonline;
if(PI[params[0]][pAdmin] != 0)
{
PI[params[0]][pAdmin] = params[1];
mysql_format(dbHandle, string, sizeof(string), "UPDATE "T_ADMIN" SET `level` = '%d' WHERE `name` = '%s' LIMIT 1", params[1], GetName(params[0]));
mysql_format(dbHandle, string, sizeof(string), "UPDATE "Account" SET `Admin` = '%d' WHERE `name` = '%s' LIMIT 1", params[1], GetName(params[0]));
mysql_tquery(dbHandle, string, "", "");
f(string,"Вы установили уровень администратора %s на %i", params[0], params[1]);
send(playerid, COLOR_YELLOW, string);
}
else
{
new data[15];
getdate(years, months, days);
PI[params[0]][pAdmin] = params[1];
format(data, sizeof(data), "%02d.%02d.%04d", days, months, years);
mysql_format(dbHandle, string, sizeof(string), "INSERT INTO "T_ADMIN" (`name`, `level`, `last_connect`, `put_admin`, `data`) VALUES ('%s', %d, '%s', '%s', '%s')", GetName(params[0]), params[1], data, GetName(playerid), data);
mysql_tquery(dbHandle, string, "", "");
format(string, sizeof(string), "%s добавлен в список администрации. Уровень полномочий %i", GetName(params[0]), params[1]);
SendClientMessage(playerid, COLOR_GREEN, string);
format(string, sizeof(string), "%s добавил в список администрации %s (%i уровень)", GetName(playerid), params[0], params[1]);
}
return 1;
}

Какойто-то бред теперь в базе данных в


"UPDATE "T_ADMIN" SET `level` = '%d' WHERE `name` = '%s' LIMIT 1", params[1], GetName(params[0]));

записуется если ток 10 уровень админки выдать.

DeimoS
26.10.2016, 15:40
CMD:makeadmin(playerid,params[])
{
new giveplayerid,
admin_level;
if(sscanf(params,"ri", giveplayerid, admin_level))
return send(playerid,0x00BFFFAA,"[КОМАНДЫ] {FFFFFF}/makeadmin [id игрока] [админка].");

if(giveplayerid == INVALID_PLAYER_ID)
return Notonline;

if(!(1 <= admin_level <= 10))
return send(playerid,0xFF0000AA,"[ОШИБКА] {FFFFFF}Доступные уровни админки от 1 до 10.");

if(PI[giveplayerid][pAdmin])
{
f(string,"Вы установили уровень администратора %s на %i", giveplayerid, admin_level);
send(playerid, COLOR_YELLOW, string);
mysql_format(dbHandle, string, sizeof(string), "UPDATE "T_ADMIN" SET `level` = '%d' WHERE `name` = '%s' LIMIT 1", admin_level, GetName(giveplayerid));
}
else
{
format(string, sizeof(string), "%s добавлен в список администрации. Уровень полномочий %i", GetName(giveplayerid), admin_level);
send(playerid, COLOR_GREEN, string);

getdate(years, months, days);
mysql_format(dbHandle, string, sizeof(string), "INSERT INTO "T_ADMIN" (`name`, `level`, `last_connect`, `put_admin`, `data`) VALUES ('%s', %d, '%02d.%02d.%04d', '%s', '%02d.%02d.%04d')", GetName(giveplayerid), admin_level, days, months, years, GetName(playerid), days, months, years);
}
mysql_tquery(dbHandle, string, "", "");
PI[giveplayerid][pAdmin] = admin_level;
return 1;
}

kala4iks
26.10.2016, 16:27
CMD:makeadmin(playerid,params[])
{
new giveplayerid,
admin_level;
if(sscanf(params,"ri", giveplayerid, admin_level))
return send(playerid,0x00BFFFAA,"[КОМАНДЫ] {FFFFFF}/makeadmin [id игрока] [админка].");

if(giveplayerid == INVALID_PLAYER_ID)
return Notonline;

if(!(1 <= admin_level <= 10))
return send(playerid,0xFF0000AA,"[ОШИБКА] {FFFFFF}Доступные уровни админки от 1 до 10.");

if(PI[giveplayerid][pAdmin])
{
f(string,"Вы установили уровень администратора %s на %i", giveplayerid, admin_level);
send(playerid, COLOR_YELLOW, string);
mysql_format(dbHandle, string, sizeof(string), "UPDATE "T_ADMIN" SET `level` = '%d' WHERE `name` = '%s' LIMIT 1", admin_level, GetName(giveplayerid));
}
else
{
format(string, sizeof(string), "%s добавлен в список администрации. Уровень полномочий %i", GetName(giveplayerid), admin_level);
send(playerid, COLOR_GREEN, string);

getdate(years, months, days);
mysql_format(dbHandle, string, sizeof(string), "INSERT INTO "T_ADMIN" (`name`, `level`, `last_connect`, `put_admin`, `data`) VALUES ('%s', %d, '%02d.%02d.%04d', '%s', '%02d.%02d.%04d')", GetName(giveplayerid), admin_level, days, months, years, GetName(playerid), days, months, years);
}
mysql_tquery(dbHandle, string, "", "");
PI[giveplayerid][pAdmin] = admin_level;
return 1;
}

Теперь в базу данных вообще не записуется не в аккаунт не в базу админок.

kala4iks
29.10.2016, 15:01
Выручайте. в чем может быть проблема?

kala4iks
02.11.2016, 11:25
Help

vovandolg
02.11.2016, 17:39
Логируй события входа/выхода на сервер + выдачу/после выдачи и смотри где она пропадает

kala4iks
06.11.2016, 11:37
Все разобрался string был слишком маленький.