Перейти к содержанию
Авторизация  
#Pawno

Система префиксов(MYSQL)

Рекомендуемые сообщения

#Pawno

Многие наверно видели на разных проектах префиксы различные для админов? так вот я вам сегодня расскажу как сделать с сохранением их.

Для полноценной работы нужно Mysql r39-6 или выше , а также ZCMD или DC_CMD

 

ко всем define

#define SendMes(%0,%1,%2,%3) format(format_stra, 144, %2,%3), SendClientMessage(%0, %1, format_stra)
#define GetName(%0) PI[%0][pName]

Далее ищем где у вас переменные аккаунта например, у меня это pInfo.

 

Добавляем 

pAdmprefix[32]

далее мы в OnPlayerConnect добавляем значение , чтоб не кому не давался префикс.

PlayerInfo[playerid][pAdmprefix] = EOS;

Для того чтоб наш префикс сохранялся , создаем в бд следующую строку.
 

ALTER TABLE accounts ADD  Admprefix varchar(32);

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

 

 

Для этого в OnPlayerLogin добавляем следующий код.

cache_get_field_content(0, "Admprefix", PlayerInfo[playerid][pAdmprefix], dbHandle, 32); //  Загрузка префкиса админа

На этом мы закончили основную часть системы , далее нам нужна команда для создание префиксов и добавить в чат админов префикс отображение.

CMD:setprefix(playerid,params[])
{
    if(PlayerInfo[playerid][pAdmin] > 1) return 1;
    if(sscanf(params,"ds[32]", params[0],params[1])) return SendClientMessage(playerid, -1, "/setprefix [Ид игрока] [Префикс]");
    if(PlayerInfo[playerid][pAdmin] < 1) return SendClientMessage(playerid,-1,"игрок не администратор");
    if(IsPlayerConnected(params[0])) // Проверка на то,что игрок приконнектился
    {
            strmid(PlayerInfo[params[0]][pAdmprefix] ,params[1], 0, 32, 32); //
            SendMes(params[0],0xEEE9E9FF,"Вы установили админу %s префикс: %s",GetName(playerid),PlayerInfo[params[0]][pAdmprefix]);
    }
    return 1;
}

Ну и последние это команда для отображение  адм с префиксом.
 

CMD:admins(playerid, params[])
{
    if(PlayerInfo[playerid][pAdmin] < 1) return 1;
    SendClientMessage(playerid,-1,"Администраторы онлайн:");
    foreach(Player, i)
    {
        if(PlayerInfo[i][pAdmin])
        {
            new temp[144];
            format(temp,sizeof(temp),"%s[%d][%d lvl] [%s]\n",GetName(playerid),i,PlayerInfo[i][pAdmin],PlayerInfo[i][pAdmprefix]);
            SendClientMessage(playerid, -1, temp);
        }
        else
        {
                SendClientMessage(playerid, -1, "- В сети нет администраторов");
        }
    }
    return 1;
}

Ну и пример использованья в другом месте этого префикса  

new temp[144];
format(temp,sizeof(temp),"%s",PlayerInfo[i][pAdmprefix]);//  PlayerInfo[i][pAdmprefix] будет выводить префикс админа
SendClientMessage(playerid, -1, temp);

На этом все. 
Автор: #pawno

Будут ошибки пишите помогу.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
noname_idk

@#Pawno, уж определись, какой уровень нужен:

if(PlayerInfo[playerid][pAdmin] > 1) return 1;
// тут sscanf
if(PlayerInfo[playerid][pAdmin] < 1) return 1; 

И команда admins тоже корявая. Будет текст в таком формате:

Администратор такой-то
В сети нет администраторов
В сети нет администраторов
В сети нет администраторов
Администратор такой-то

И сохранения при выдаче префикса не видать  :-)

Изменено пользователем Elrmrnt-Kritik
  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Web

Макросы тут не к чему, версия мускула у всех разная как и переменные. На это стоило бы обратить внимание как минимум. Так же ячейку в базе можно и просто через веб-интерфейс добавить. При этом выбрав, после чего она была бы создана.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
noname_idk

@Wеb, разве не проще пользователям вставить этот запрос в поле SQL запроса, чем еще в каких-то полях вводить непонятно что (для них)? Думаю, этот момент крайне субъективен и не стоит за это попрекать автора.  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
#Pawno

 

 


strmid(PlayerInfo[params[0]][pAdmprefix] ,params[1], 0, 32, 32); //
вот на счет сохранение что вылетело щас напишу.

CMD:setprefix(playerid,params[]){
    if(PlayerInfo[playerid][pAdmin] > 1) return 1;
    if(sscanf(params,"ds[32]", params[0],params[1])) return SendClientMessage(playerid, -1, "/setprefix [Ид игрока] [Префикс]");
    if(PlayerInfo[playerid][pAdmin] < 1) return SendClientMessage(playerid,-1,"игрок не администратор");
    if(IsPlayerConnected(params[0])) // Проверка на то,что игрок приконнектился
    {
            strmid(PlayerInfo[params[0]][pAdmprefix] ,params[1], 0, 32, 32); // 
            SendMes(params[0],0xEEE9E9FF,"Вы установили админу %s префикс: %s",GetName(playerid),PlayerInfo[params[0]][pAdmprefix]);
format(query,sizeof(query),"UPDATE accounts SET Admprefix='%s' WHERE name='%s'",PlayerInfo[playerid][pAdmprefix], GetName(playerid));
mysql_tquery(dbHandle, query, "", "");
    }
    return 1;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
MOP TTEX

 

 


 if(PlayerInfo[playerid][pAdmin]
 if(PlayerInfo[params[0]][pAdmin] < 1) return SendClientMessage(playerid,-1,"игрок не администратор");

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Pawno-Scripter

OnPlayerLogin нету такого

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Pawno-Scripter

и вот ещё ошибочки :с

C:\Users\??????\Desktop\????? ????? (8)\gamemodes\sgl.pwn(5462) : error 002: only a single statement (or expression) can follow each "case"

C:\Users\??????\Desktop\????? ????? (8)\gamemodes\sgl.pwn(5462) : error 017: undefined symbol "dbHandle"
C:\Users\??????\Desktop\????? ????? (8)\gamemodes\sgl.pwn(5462) : warning 215: expression has no effect
C:\Users\??????\Desktop\????? ????? (8)\gamemodes\sgl.pwn(5463) : error 014: invalid statement; not in switch
C:\Users\??????\Desktop\????? ????? (8)\gamemodes\sgl.pwn(5463) : warning 215: expression has no effect
C:\Users\??????\Desktop\????? ????? (8)\gamemodes\sgl.pwn(5463) : error 001: expected token: ";", but found ":"
C:\Users\??????\Desktop\????? ????? (8)\gamemodes\sgl.pwn(5463) : error 029: invalid expression, assumed zero
C:\Users\??????\Desktop\????? ????? (8)\gamemodes\sgl.pwn(5463) : fatal error 107: too many error messages on one line
 
Compilation aborted.Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase
 
 
6 Errors.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.