PDA

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



noname32342
24.05.2020, 22:34
Всем привет, я хотел бы спросить по двум командам. 1 - /makeadminoff и вторая /amusic.

Смотрите, надо в /makeadmin чтобы выдавало максимальный уровень. Который я поставлю, если этого не будет, в бд можно будет поставить хоть 1.000.000 уровень, а надо чтоб поставить в команду и тот лвл был максимум. И второе, чтобы чекал в оффе последний лвл который был перед установкой другого. Это вот это строка. Также, когда пытался вводить максимум лвл через if, выходила ошибка 033.
format(string,sizeof(string),"[MakeAdminOff] Администратор %s установил в оффлайне %d уровень адм. игроку %s. До этого был: %d ур.",Name(playerid),admin,name);
SendAdminsMessage(COLOR_OLDRED,string);.
вот команда фулл
CMD:makeadminoff(playerid, params[])
{
new name[25], admin[125];
if(PlayerInfo[playerid][pAdmin] < 7)return false;
if(ADuty[playerid]!=228) return SendClientMessage(playerid,COLOR_GREY,NO_DUTY_TEXT);
new str[256], string[400];
if(sscanf(params, "s[25]ds[125]", name,admin)) return SendClientMessage(playerid, COLOR_GREY, !"/makeadminoff [name] [lvl (0-6)]");
foreach(Player,i)
{
if(IsPlayerLogged[i]) if(strcmp(PN(i), name, true)==0) return SendClientMessage(playerid, COLOR_RED, !"[Îøèáêà]{FFFFFF} Èãðîê ñåé÷àñ íàõîäèòñÿ íà ñåðâåðå, èñïîëüçóéòå /makeadmin");
}
new player = GetNameID(name);
if(player != INVALID_PLAYER_ID) return SendClientMessage(playerid,COLOR_RED, !"[Îøèáêà]{FFFFFF} Èãðîê ñåé÷àñ íàõîäèòñÿ íà ñåðâåðå, èñïîëüçóéòå /makeadmin");
format(str, sizeof(str), "UPDATE `accounts` SET `Admin`='%d' WHERE `NickName`='%s'",admin,name);
mysql_tquery(mysql, str);
format(string,sizeof(string),"[Èíôîðìàöèÿ] {FFFFFF}Âû óñïåøíî óñòàíîâèëè %d óðîâåíü àäì. èãðîêó %s",admin,name);
SendClientMessage(playerid,COLOR_RED,string);
format(string,sizeof(string),"[MakeAdminOff] Администратор %s установил в оффлайне %d уровень адм. игроку %s. До этого был: %d ур.",Name(playerid),admin,name);
SendAdminsMessage(COLOR_OLDRED,string);
format(string,sizeof(string),"Àäìèíèñòðàòîð <a href=/logsaccount?name=%s>%s</a> ñíÿë ñ ïîñòà àäìèíèñòðàòîðà <a href=/logsaccount?name=%s>%s</a>.",PN(playerid),Name(playerid),name,name);
AdminLogs(playerid, string);
AllLogs(playerid, string);
return 1;
}

и вторая, она воспроизводит музыку только у меня и через секунду прерывается, хотя должна идти нормально и у всех кто в радиусе
вот команда
CMD:amusic(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 4) return true;
new UMusic[128];
new Float: MusicU[5] = 100.0;
new bool:Music2;
new Float:Distance;
if(sscanf(params,"fs[100]", Distance, params)) return SendClientMessage(playerid,COLOR_RED, !"[Îøèáêà]{FFFFFF} Ââåäèòå: /amusic [ðàäèóñ] [ññûëêà]");
GetPlayerPos(playerid, MusicU[1], MusicU[2], MusicU[3]);
MusicU[4] = Distance; Music2 = true;
UMusic[0] = 0;
strcat(UMusic, params);
new string[128];
format(string,sizeof(string),"[A] Àäìèíèñòðàòîð %s âêëþ÷èë ìóçûêó c ðàäèóñîì %d.",PN(playerid),Distance);
SendAdminsMessage(COLOR_GREEN,string);
if(Music2 == true)
{
if(IsPlayerInRangeOfPoint(playerid, MusicU[4], MusicU[1], MusicU[2], MusicU[3]))
{
if(!GetPVarInt(playerid,"Music"))
{
SetPVarInt(playerid,"Music",1);
PlayAudioStreamForPlayer(playerid, UMusic, MusicU[1], MusicU[2], MusicU[3], MusicU[4], true);
}
}
else
{
if(GetPVarInt(playerid, "Music"))
{
DeletePVar(playerid,"Music");
StopAudioStreamForPlayer(playerid);
}
}
}
return true;
} (на иероглифы не обращайте внимание)

Shaolinka
25.05.2020, 01:15
Всем привет, я хотел бы спросить по двум командам. 1 - /makeadminoff и вторая /amusic.

Смотрите, надо в /makeadmin чтобы выдавало максимальный уровень. Который я поставлю, если этого не будет, в бд можно будет поставить хоть 1.000.000 уровень, а надо чтоб поставить в команду и тот лвл был максимум. И второе, чтобы чекал в оффе последний лвл который был перед установкой другого. Это вот это строка. Также, когда пытался вводить максимум лвл через if, выходила ошибка 033.
format(string,sizeof(string),"[MakeAdminOff] Администратор %s установил в оффлайне %d уровень адм. игроку %s. До этого был: %d ур.",Name(playerid),admin,name);
SendAdminsMessage(COLOR_OLDRED,string);.
вот команда фулл
CMD:makeadminoff(playerid, params[])
{
new name[25], admin[125];
if(PlayerInfo[playerid][pAdmin] < 7)return false;
if(ADuty[playerid]!=228) return SendClientMessage(playerid,COLOR_GREY,NO_DUTY_TEXT);
new str[256], string[400];
if(sscanf(params, "s[25]ds[125]", name,admin)) return SendClientMessage(playerid, COLOR_GREY, !"/makeadminoff [name] [lvl (0-6)]");
foreach(Player,i)
{
if(IsPlayerLogged[i]) if(strcmp(PN(i), name, true)==0) return SendClientMessage(playerid, COLOR_RED, !"[Îøèáêà]{FFFFFF} Èãðîê ñåé÷àñ íàõîäèòñÿ íà ñåðâåðå, èñïîëüçóéòå /makeadmin");
}
new player = GetNameID(name);
if(player != INVALID_PLAYER_ID) return SendClientMessage(playerid,COLOR_RED, !"[Îøèáêà]{FFFFFF} Èãðîê ñåé÷àñ íàõîäèòñÿ íà ñåðâåðå, èñïîëüçóéòå /makeadmin");
format(str, sizeof(str), "UPDATE `accounts` SET `Admin`='%d' WHERE `NickName`='%s'",admin,name);
mysql_tquery(mysql, str);
format(string,sizeof(string),"[Èíôîðìàöèÿ] {FFFFFF}Âû óñïåøíî óñòàíîâèëè %d óðîâåíü àäì. èãðîêó %s",admin,name);
SendClientMessage(playerid,COLOR_RED,string);
format(string,sizeof(string),"[MakeAdminOff] Администратор %s установил в оффлайне %d уровень адм. игроку %s. До этого был: %d ур.",Name(playerid),admin,name);
SendAdminsMessage(COLOR_OLDRED,string);
format(string,sizeof(string),"Àäìèíèñòðàòîð <a href=/logsaccount?name=%s>%s</a> ñíÿë ñ ïîñòà àäìèíèñòðàòîðà <a href=/logsaccount?name=%s>%s</a>.",PN(playerid),Name(playerid),name,name);
AdminLogs(playerid, string);
AllLogs(playerid, string);
return 1;
}

и вторая, она воспроизводит музыку только у меня и через секунду прерывается, хотя должна идти нормально и у всех кто в радиусе
вот команда
CMD:amusic(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 4) return true;
new UMusic[128];
new Float: MusicU[5] = 100.0;
new bool:Music2;
new Float:Distance;
if(sscanf(params,"fs[100]", Distance, params)) return SendClientMessage(playerid,COLOR_RED, !"[Îøèáêà]{FFFFFF} Ââåäèòå: /amusic [ðàäèóñ] [ññûëêà]");
GetPlayerPos(playerid, MusicU[1], MusicU[2], MusicU[3]);
MusicU[4] = Distance; Music2 = true;
UMusic[0] = 0;
strcat(UMusic, params);
new string[128];
format(string,sizeof(string),"[A] Àäìèíèñòðàòîð %s âêëþ÷èë ìóçûêó c ðàäèóñîì %d.",PN(playerid),Distance);
SendAdminsMessage(COLOR_GREEN,string);
if(Music2 == true)
{
if(IsPlayerInRangeOfPoint(playerid, MusicU[4], MusicU[1], MusicU[2], MusicU[3]))
{
if(!GetPVarInt(playerid,"Music"))
{
SetPVarInt(playerid,"Music",1);
PlayAudioStreamForPlayer(playerid, UMusic, MusicU[1], MusicU[2], MusicU[3], MusicU[4], true);
}
}
else
{
if(GetPVarInt(playerid, "Music"))
{
DeletePVar(playerid,"Music");
StopAudioStreamForPlayer(playerid);
}
}
}
return true;
} (на иероглифы не обращайте внимание)


Всем привет, я хотел бы спросить по двум командам. 1 - /makeadminoff и вторая /amusic.

Смотрите, надо в /makeadmin чтобы выдавало максимальный уровень. Который я поставлю, если этого не будет, в бд можно будет поставить хоть 1.000.000 уровень, а надо чтоб поставить в команду и тот лвл был максимум. И второе, чтобы чекал в оффе последний лвл который был перед установкой другого. Это вот это строка. Также, когда пытался вводить максимум лвл через if, выходила ошибка 033.
format(string,sizeof(string),"[MakeAdminOff] Администратор %s установил в оффлайне %d уровень адм. игроку %s. До этого был: %d ур.",Name(playerid),admin,name);
SendAdminsMessage(COLOR_OLDRED,string);.
вот команда фулл
CMD:makeadminoff(playerid, params[])
{
new name[25], admin[125];
if(PlayerInfo[playerid][pAdmin] < 7)return false;
if(ADuty[playerid]!=228) return SendClientMessage(playerid,COLOR_GREY,NO_DUTY_TEXT);
new str[256], string[400];
if(sscanf(params, "s[25]ds[125]", name,admin)) return SendClientMessage(playerid, COLOR_GREY, !"/makeadminoff [name] [lvl (0-6)]");
foreach(Player,i)
{
if(IsPlayerLogged[i]) if(strcmp(PN(i), name, true)==0) return SendClientMessage(playerid, COLOR_RED, !"[Îøèáêà]{FFFFFF} Èãðîê ñåé÷àñ íàõîäèòñÿ íà ñåðâåðå, èñïîëüçóéòå /makeadmin");
}
new player = GetNameID(name);
if(player != INVALID_PLAYER_ID) return SendClientMessage(playerid,COLOR_RED, !"[Îøèáêà]{FFFFFF} Èãðîê ñåé÷àñ íàõîäèòñÿ íà ñåðâåðå, èñïîëüçóéòå /makeadmin");
format(str, sizeof(str), "UPDATE `accounts` SET `Admin`='%d' WHERE `NickName`='%s'",admin,name);
mysql_tquery(mysql, str);
format(string,sizeof(string),"[Èíôîðìàöèÿ] {FFFFFF}Âû óñïåøíî óñòàíîâèëè %d óðîâåíü àäì. èãðîêó %s",admin,name);
SendClientMessage(playerid,COLOR_RED,string);
format(string,sizeof(string),"[MakeAdminOff] Администратор %s установил в оффлайне %d уровень адм. игроку %s. До этого был: %d ур.",Name(playerid),admin,name);
SendAdminsMessage(COLOR_OLDRED,string);
format(string,sizeof(string),"Àäìèíèñòðàòîð <a href=/logsaccount?name=%s>%s</a> ñíÿë ñ ïîñòà àäìèíèñòðàòîðà <a href=/logsaccount?name=%s>%s</a>.",PN(playerid),Name(playerid),name,name);
AdminLogs(playerid, string);
AllLogs(playerid, string);
return 1;
}

и вторая, она воспроизводит музыку только у меня и через секунду прерывается, хотя должна идти нормально и у всех кто в радиусе
вот команда
CMD:amusic(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 4) return true;
new UMusic[128];
new Float: MusicU[5] = 100.0;
new bool:Music2;
new Float:Distance;
if(sscanf(params,"fs[100]", Distance, params)) return SendClientMessage(playerid,COLOR_RED, !"[Îøèáêà]{FFFFFF} Ââåäèòå: /amusic [ðàäèóñ] [ññûëêà]");
GetPlayerPos(playerid, MusicU[1], MusicU[2], MusicU[3]);
MusicU[4] = Distance; Music2 = true;
UMusic[0] = 0;
strcat(UMusic, params);
new string[128];
format(string,sizeof(string),"[A] Àäìèíèñòðàòîð %s âêëþ÷èë ìóçûêó c ðàäèóñîì %d.",PN(playerid),Distance);
SendAdminsMessage(COLOR_GREEN,string);
if(Music2 == true)
{
if(IsPlayerInRangeOfPoint(playerid, MusicU[4], MusicU[1], MusicU[2], MusicU[3]))
{
if(!GetPVarInt(playerid,"Music"))
{
SetPVarInt(playerid,"Music",1);
PlayAudioStreamForPlayer(playerid, UMusic, MusicU[1], MusicU[2], MusicU[3], MusicU[4], true);
}
}
else
{
if(GetPVarInt(playerid, "Music"))
{
DeletePVar(playerid,"Music");
StopAudioStreamForPlayer(playerid);
}
}
}
return true;
} (на иероглифы не обращайте внимание)

Q:1. 1) Смотрите, надо в /makeadmin чтобы выдавало максимальный уровень. Который я поставлю, если этого не будет, в бд можно будет поставить хоть 1.000.000 уровень, а надо чтоб поставить в команду и тот лвл был максимум. 2) И второе, чтобы чекал в оффе последний лвл который был перед установкой другого. Это вот это строка. Также, когда пытался вводить максимум лвл через if, выходила ошибка 033.

A:1. 1) Создать столбец в таблице, при инициализации игрока загружать его, если будут много подобных действий, то лучше отдельную таблицу. 2) запросом в базу, ну а если инициализируешь игрока после окончания регистрации/авторизации, то присвоить в переменную текущий уровень админки игрока.

Q:2. 1) Так правильно же, у тебя цикла с перебором игроков в радиусе-то нет.

Если ты не прочитал то, что я написал выше, то вот:


CMD:makeadminoff(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 7)
return 0xFFFF;

if(ADuty[playerid] != 228)
return SendClientMessage(playerid, COLOR_GREY, NO_DUTY_TEXT);

extract params -> new string: to_player_name[24 + 1], desire_admin_lvl; else
return SendClientMessage(playerid, COLOR_GREY, "/makeadminoff [name] [lvl (0-99)]");

new to_player = GetNameID(to_player_name);

if(to_player != INVALID_PLAYER_ID)
return SendClientMessage(playerid, COLOR_RED, "[Îøèáêà]{FFFFFF} Èãðîê ñåé÷àñ íàõîäèòñÿ íà ñåðâåðå, èñïîëüçóéòå /makeadmin");

new fmt_str[] = "SELECT Admin WHERE NickName='%e'",
result_str[(((sizeof fmt_str) + ((- 2 + (MAX_PLAYER_NAME + 1))) + 1))];

mysql_format(result_str, sizeof result_str, fmt_str, to_player_name);
mysql_tquery(mysql, result_str);

new rows = cache_num_rows(),
to_player_admin_lvl = -1;

if(rows)
to_player_admin_lvl = cache_get_row_int(0, 0);

else
return 0;

new fmt_str_prototype[] = "UPDATE accounts SET Admin=%d WHERE NickName='%e'",
result_str_prototype[(((sizeof fmt_str_prototype) + ((- 2 + 2) + (- 2 + (MAX_PLAYER_NAME + 1))) + 1))];

mysql_format(mysql, result_str_prototype, sizeof result_str_prototype, fmt_str_prototype, desire_admin_lvl, to_player_name);
mysql_tquery(mysql, result_str_prototype);

new fmt_str_prototype_first[] = "[Èíôîðìàöèÿ] {FFFFFF}Âû óñïåøíî óñòàíîâèëè %d óðîâåíü àäì. èãðîêó %s",
result_str_prototype_first[(((sizeof fmt_str_prototype_first) + ((- 2 + 2) + (- 2 + (MAX_PLAYER_NAME + 1))) + 1))];

format(result_str_prototype_first, sizeof result_str_prototype_first, fmt_str_prototype_first, desire_admin_lvl, to_player_name);
SendClientMessage(playerid, COLOR_RED, result_str_prototype_first);

new fmt_str_prototype_second[] = "[MakeAdminOff] Администратор %s установил в оффлайне %d уровень адм. игроку %s. До этого был: %d ур.",
result_str_prototype_second[(((sizeof fmt_str_prototype_) + ((- 2 + (MAX_PLAYER_NAME + 1)) + (- 2 + 2) + (- 2 + (MAX_PLAYER_NAME + 1)) + (- 2 + 2)) + 1))];

format(result_str_prototype_second, sizeof result_str_prototype_second, fmt_str_prototype_second, Name(playerid), desire_admin_lvl, to_player_name, to_player_admin_lvl);
SendAdminsMessage(COLOR_OLDRED, result_str_prototype_second);

new fmt_str_prototype_three[] = "Àäìèíèñòðàòîð <a href=/logsaccount?name=%s>%s</a> ñíÿë ñ ïîñòà àäìèíèñòðàòîðà <a href=/logsaccount?name=%s>%s</a>.",
result_str_prototype_three[(((sizeof fmt_str_prototype_three) +((- 2 + (MAX_PLAYER_NAME + 1)) + (- 2 + (MAX_PLAYER_NAME + 1)) + (- 2 + (MAX_PLAYER_NAME + 1)) + (- 2 + (MAX_PLAYER_NAME + 1))) + 1))];

format(result_str_prototype_three, sizeof result_str_prototype_three, fmt_str_prototype_three, Name(playerid), Name(playerid), to_player_name, to_player_name);
AdminLogs(playerid, result_str_prototype_three);

return AllLogs(playerid, result_str_prototype_three);
}

2-ую писать не стал, просто циклом перебери всех игроков, которые в радиусе от игрока

noname32342
25.05.2020, 05:15
Q:1. 1) Смотрите, надо в /makeadmin чтобы выдавало максимальный уровень. Который я поставлю, если этого не будет, в бд можно будет поставить хоть 1.000.000 уровень, а надо чтоб поставить в команду и тот лвл был максимум. 2) И второе, чтобы чекал в оффе последний лвл который был перед установкой другого. Это вот это строка. Также, когда пытался вводить максимум лвл через if, выходила ошибка 033.

A:1. 1) Создать столбец в таблице, при инициализации игрока загружать его, если будут много подобных действий, то лучше отдельную таблицу. 2) запросом в базу, ну а если инициализируешь игрока после окончания регистрации/авторизации, то присвоить в переменную текущий уровень админки игрока.

Q:2. 1) Так правильно же, у тебя цикла с перебором игроков в радиусе-то нет.

Если ты не прочитал то, что я написал выше, то вот:


CMD:makeadminoff(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 7)
return 0xFFFF;

if(ADuty[playerid] != 228)
return SendClientMessage(playerid, COLOR_GREY, NO_DUTY_TEXT);

extract params -> new string: to_player_name[24 + 1], desire_admin_lvl; else
return SendClientMessage(playerid, COLOR_GREY, "/makeadminoff [name] [lvl (0-99)]");

new to_player = GetNameID(to_player_name);

if(to_player != INVALID_PLAYER_ID)
return SendClientMessage(playerid, COLOR_RED, "[Îøèáêà]{FFFFFF} Èãðîê ñåé÷àñ íàõîäèòñÿ íà ñåðâåðå, èñïîëüçóéòå /makeadmin");

new fmt_str[] = "SELECT Admin WHERE NickName='%e'",
result_str[(((sizeof fmt_str) + ((- 2 + (MAX_PLAYER_NAME + 1))) + 1))];

mysql_format(result_str, sizeof result_str, fmt_str, to_player_name);
mysql_tquery(mysql, result_str);

new rows = cache_num_rows(),
to_player_admin_lvl = -1;

if(rows)
to_player_admin_lvl = cache_get_row_int(0, 0);

else
return 0;

new fmt_str_prototype[] = "UPDATE accounts SET Admin=%d WHERE NickName='%e'",
result_str_prototype[(((sizeof fmt_str_prototype) + ((- 2 + 2) + (- 2 + (MAX_PLAYER_NAME + 1))) + 1))];

mysql_format(mysql, result_str_prototype, sizeof result_str_prototype, fmt_str_prototype, desire_admin_lvl, to_player_name);
mysql_tquery(mysql, result_str_prototype);

new fmt_str_prototype_first[] = "[Èíôîðìàöèÿ] {FFFFFF}Âû óñïåøíî óñòàíîâèëè %d óðîâåíü àäì. èãðîêó %s",
result_str_prototype_first[(((sizeof fmt_str_prototype_first) + ((- 2 + 2) + (- 2 + (MAX_PLAYER_NAME + 1))) + 1))];

format(result_str_prototype_first, sizeof result_str_prototype_first, fmt_str_prototype_first, desire_admin_lvl, to_player_name);
SendClientMessage(playerid, COLOR_RED, result_str_prototype_first);

new fmt_str_prototype_second[] = "[MakeAdminOff] Администратор %s установил в оффлайне %d уровень адм. игроку %s. До этого был: %d ур.",
result_str_prototype_second[(((sizeof fmt_str_prototype_) + ((- 2 + (MAX_PLAYER_NAME + 1)) + (- 2 + 2) + (- 2 + (MAX_PLAYER_NAME + 1)) + (- 2 + 2)) + 1))];

format(result_str_prototype_second, sizeof result_str_prototype_second, fmt_str_prototype_second, Name(playerid), desire_admin_lvl, to_player_name, to_player_admin_lvl);
SendAdminsMessage(COLOR_OLDRED, result_str_prototype_second);

new fmt_str_prototype_three[] = "Àäìèíèñòðàòîð <a href=/logsaccount?name=%s>%s</a> ñíÿë ñ ïîñòà àäìèíèñòðàòîðà <a href=/logsaccount?name=%s>%s</a>.",
result_str_prototype_three[(((sizeof fmt_str_prototype_three) +((- 2 + (MAX_PLAYER_NAME + 1)) + (- 2 + (MAX_PLAYER_NAME + 1)) + (- 2 + (MAX_PLAYER_NAME + 1)) + (- 2 + (MAX_PLAYER_NAME + 1))) + 1))];

format(result_str_prototype_three, sizeof result_str_prototype_three, fmt_str_prototype_three, Name(playerid), Name(playerid), to_player_name, to_player_name);
AdminLogs(playerid, result_str_prototype_three);

return AllLogs(playerid, result_str_prototype_three);
}

2-ую писать не стал, просто циклом перебери всех игроков, которые в радиусе от игрока

Это очень хорошо, но выдает ошибки. Та и это полностью переписанная команда. Можно вроде сделать, чтобы чекал лвл с бд, потом изменял уже, та и надо именно чтобы не 34543 лвл выдать можно было, а вот максимальный 6. Та и с /amusic не разобрался. Я бы не сказал, что я лучший знаток в павн.