PDA

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



DmitriyVasilev
07.02.2019, 12:08
Здравствуйте, при назначении саппорта, создаются две строки с одним и тем же именем. как исправить, чтобы при назначении сапорта создавалась только одна строка в бд?
CMD:spmenu(playerid, params[])
{
if(User[playerid][pAdmin] < 9) return 1;
new Names[32], query[128];
if(User[playerid][pAdmin] > 7) format(query, sizeof(query), "{FF8040}Назначить саппорта\n");
mysql_format(DATABASE, QUERY, 62, "SELECT Name FROM `"TABLE_ACCOUNTS"` WHERE pHelper IN ('1','2')");
mysql_query(DATABASE, QUERY);
new r = cache_num_rows();
if(r)
{
for(new i = 0; i < r; i++)
{
new strin[40];
cache_get_field_content(i,"Name",Names,DATABASE,60);
format(strin,sizeof(strin),"%s\n",Names);
strcat(query, strin);
}
}
ShowPlayerDialog(playerid, 21021, DIALOG_STYLE_LIST, "Управление саппортами", query, "Далее", "Закрыть");
return true;
}
CMD:addsupport(playerid, params[])
{
if(User[playerid][pAdmin] < 9 || dostup[playerid] == 0) return 1;
new name[32], var;
if(sscanf(params, "s[32]i", name, var)) return SCM(playerid, -1, "Введите: /addsupport [ник] [1 - назначить | 0 - снять]");
new para1 = GetPlayerID(name);
if(IsPlayerConnected(para1) && para1 != INVALID_PLAYER_ID)
{
if(var == 1)
{
User[para1][pHelper] = 2;
mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '2' WHERE name = '%s'",name);
format(YCMDstr, sizeof(YCMDstr), "Вы назначили %s[%i] саппортом", name, para1);
}
else
{
User[para1][pHelper] = 0;
mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '0' WHERE name = '%s'",name);
format(YCMDstr, sizeof(YCMDstr), "Вы сняли %s[%i] с саппорта", name, para1);
}
}
else
{
if(var == 1)
{
mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '2' WHERE name = '%s'",name);
format(YCMDstr, sizeof(YCMDstr), "Вы назначили %s саппортом", name);
}
else
{
mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '0' WHERE name = '%s'",name);
format(YCMDstr, sizeof(YCMDstr), "Вы сняли %s с саппорта", name);
}
}
mysql_function_query(DATABASE,QUERY,false,"","");
SendClientMessage(playerid, COLOR_YELLOW2, YCMDstr);
return 1;
}

//Public OnDialogResponse
case 21021:
{
if(!response) return true;
if(!strcmp(inputtext, "Назначить саппорта", true))
{
return ShowPlayerDialog(playerid, 21023, DIALOG_STYLE_INPUT, "Добавить саппорта", "Введите ник нейм саппорта", "Добавить", "Назад");
}
SetPVarString(playerid, "SelectedSupport", inputtext);
new query[128];
format(query, sizeof(query), "[0] Разморозить права\n[1] Заморозить права\n");
if(User[playerid][pAdmin] > 7) strcat(query, "[2] Снять саппорта", sizeof(query));
ShowPlayerDialog(playerid, 21022, DIALOG_STYLE_LIST, "Управление саппортами", query, "Выбор", "Назад");
}
case 21022:
{
if(!response) return DeletePVar(playerid, "SelectedSupport"),SetTimerEx("SpMenu" , 50, false, "i", playerid);
new Names[32];
new cmd_call[35];
GetPVarString(playerid, "SelectedSupport", Names, sizeof(Names));
switch(listitem)
{
case 0:
{
format(cmd_call, sizeof(cmd_call), "%s 1", Names);
callcmd::setsupport(playerid,cmd_call);
}
case 1:
{
format(cmd_call, sizeof(cmd_call), "%s 0", Names);
callcmd::setsupport(playerid,cmd_call);
}
case 2:
{
format(cmd_call, sizeof(cmd_call), "%s 0", Names);
callcmd::addsupport(playerid,cmd_call);
}
}
SetTimerEx("SpMenu" , 50, false, "i", playerid);
}
case 21023:
{
if(!response) return DeletePVar(playerid, "SelectedSupport"),callcmd::spmenu(playerid,string);
if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 21023, DIALOG_STYLE_INPUT, "Добавить саппорта", "Введите ник нейм саппорта", "Добавить", "Назад");
format(string, sizeof(string), "%s 1", inputtext);
callcmd::addsupport(playerid,string);
SetTimerEx("SpMenu" , 50, false, "i", playerid);
}
//public
@_SpMenu(playerid);
@_SpMenu(playerid) callcmd::spmenu(playerid,"");

UnO
07.02.2019, 16:12
в твоём коде строки не создаются

DmitriyVasilev
07.02.2019, 17:17
проблема только тут, в spmenu потом показывает что саппортом является 2 одинаковых ника, хотя появиться должен только один
if(IsPlayerConnected(para1) && para1 != INVALID_PLAYER_ID)
{
if(var == 1)
{
User[para1][pHelper] = 2;
mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '2' WHERE name = '%s'",name);
format(YCMDstr, sizeof(YCMDstr), "Вы назначили %s[%i] саппортом", name, para1);
}
else
{
User[para1][pHelper] = 0;
mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '0' WHERE name = '%s'",name);
format(YCMDstr, sizeof(YCMDstr), "Вы сняли %s[%i] с саппорта", name, para1);
}
}
else
{
if(var == 1)
{
mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '2' WHERE name = '%s'",name);
format(YCMDstr, sizeof(YCMDstr), "Вы назначили %s саппортом", name);
}
else
{
mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '0' WHERE name = '%s'",name);
format(YCMDstr, sizeof(YCMDstr), "Вы сняли %s с саппорта", name);
}
}
mysql_function_query(DATABASE,QUERY,false,"","");

m1n1vv
08.02.2019, 04:38
проблема только тут, в spmenu потом показывает что саппортом является 2 одинаковых ника, хотя появиться должен только один
if(IsPlayerConnected(para1) && para1 != INVALID_PLAYER_ID)
{
if(var == 1)
{
User[para1][pHelper] = 2;
mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '2' WHERE name = '%s'",name);
format(YCMDstr, sizeof(YCMDstr), "Вы назначили %s[%i] саппортом", name, para1);
}
else
{
User[para1][pHelper] = 0;
mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '0' WHERE name = '%s'",name);
format(YCMDstr, sizeof(YCMDstr), "Вы сняли %s[%i] с саппорта", name, para1);
}
}
else
{
if(var == 1)
{
mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '2' WHERE name = '%s'",name);
format(YCMDstr, sizeof(YCMDstr), "Вы назначили %s саппортом", name);
}
else
{
mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '0' WHERE name = '%s'",name);
format(YCMDstr, sizeof(YCMDstr), "Вы сняли %s с саппорта", name);
}
}
mysql_function_query(DATABASE,QUERY,false,"","");


if (IsPlayerConnected(para1))
{
User[para1][pHelper] = var == 1 ? 2 : 0;
mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '%i' WHERE name = '%s'", User[para1][pHelper], name);
format(YCMDstr, sizeof(YCMDstr), "Вы %s %s[%i] %s", var == 1 ? "назначили" : "уволили" name, para1, var == 1 ? "саппортом" : "с саппорта");
}
else
{
new
helper = var == 1 ? 2 : 0;
mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '%i' WHERE name = '%s'", helper, name);
format(YCMDstr, sizeof(YCMDstr), "Вы %s %s %s", var == 1 ? "назначили" : "уволили" name, var == 1 ? "саппортом" : "с саппорта");
}
mysql_function_query(DATABASE,QUERY,false,"","");
SendClientMessage(playerid, COLOR_YELLOW2, YCMDstr);

DmitriyVasilev
08.02.2019, 20:51
ошибку -ident.... дает в formata'x

m1n1vv
08.02.2019, 21:43
if (IsPlayerConnected(para1))
{
User[para1][pHelper] = var == 1 ? 2 : 0;
mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '%i' WHERE name = '%s'", User[para1][pHelper], name);
format(YCMDstr, sizeof(YCMDstr), "Вы %s %s[%i] %s", var == 1 ? "назначили" : "уволили", name, para1, var == 1 ? "саппортом" : "с саппорта");
}
else
{
new
helper = var == 1 ? 2 : 0;
mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '%i' WHERE name = '%s'", helper, name);
format(YCMDstr, sizeof(YCMDstr), "Вы %s %s %s", var == 1 ? "назначили" : "уволили", name, var == 1 ? "саппортом" : "с саппорта");
}
mysql_function_query(DATABASE,QUERY,false,"","");

DeimoS
09.02.2019, 19:55
if (IsPlayerConnected(para1))
{
User[para1][pHelper] = var == 1 ? 2 : 0;
mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '%i' WHERE name = '%s'", User[para1][pHelper], name);
format(YCMDstr, sizeof(YCMDstr), "Вы %s %s[%i] %s", var == 1 ? "назначили" : "уволили", name, para1, var == 1 ? "саппортом" : "с саппорта");
}
else
{
new
helper = var == 1 ? 2 : 0;
mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '%i' WHERE name = '%s'", helper, name);
format(YCMDstr, sizeof(YCMDstr), "Вы %s %s %s", var == 1 ? "назначили" : "уволили", name, var == 1 ? "саппортом" : "с саппорта");
}
mysql_function_query(DATABASE,QUERY,false,"","");

Давайте сократим количество строк, но вместо одной проверки впихнём сразу три! О-п-т-и-м-и-з-а-ц-и-я :crazy:



Автор, посмотри какое значение возвращает GetPlayerID в случае, если игрок не найден и если это не INVALID_PLAYER_ID, то замени значение вот в этом условии

if(para1 != INVALID_PLAYER_ID)

CMD:addsupport(playerid, params[])
{
if(User[playerid][pAdmin] < 9 || dostup[playerid] == 0)
return 1;

new name[MAX_PLAYER_NAME], var;
if(sscanf(params, "s[20]i", name, var))
return SCM(playerid, -1, "Введите: /addsupport [ник] [1 - назначить | 0 - снять]");

new para1 = GetPlayerID(name);
new level;
if(para1 != INVALID_PLAYER_ID)
{
if(var == 1)
{
User[para1][pHelper] = level = 2;
format(YCMDstr, sizeof(YCMDstr), "Вы назначили %s[%i] саппортом", name, para1);
}
else
{
User[para1][pHelper] = 0;
format(YCMDstr, sizeof(YCMDstr), "Вы сняли %s[%i] с саппорта", name, para1);
}
}
else
{
if(var == 1)
{
level = 2;
format(YCMDstr, sizeof(YCMDstr), "Вы назначили %s саппортом", name);
}
else
{
format(YCMDstr, sizeof(YCMDstr), "Вы сняли %s с саппорта", name);
}
}
SendClientMessage(playerid, COLOR_YELLOW2, YCMDstr);

mysql_format(DATABASE, QUERY, sizeof(QUERY), "UPDATE accounts SET pHelper=%d WHERE name='%e'", level, name);
mysql_function_query(DATABASE, QUERY, false, "", "");
return 1;
}

И да, тот код, что ты показал, не может создавать второй аккаунт, так как тут просто нет INSERT запроса, создающего строки. Проблему ищи где-то в другом месте