Sign in to follow this  
Followers 0
F1re

Проблема с /alogin

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



17 posts in this topic

Любой игрок вводит /alogin, вводит свой пароль от аккаунта и получает админку 6 лвл.

Если даже так, я указал игроку 3 лвл админки он при /alogin получает 6 лвл.

Share this post


Link to post
Share on other sites
CMD:alogin(playerid, params[])
{
    if(GetPVarInt(playerid, "check_adm") > gettime()) return 1;
    else if(AdminLogged[playerid]) return SendClientMessage(playerid, COLOR_GREY, "Вы уже авторизовались как администратор!");
 	new string[128];
	format(string, sizeof(string), "SELECT * FROM "T_ADMIN" WHERE `name` = '%s'", GetName(playerid));
	mysql_tquery(dbHandle, string, "adm", "is", playerid, GetName(playerid));
 	SetPVarInt(playerid, "check_adm", gettime()+5);
 	return 1;
}

 

Share this post


Link to post
Share on other sites

@Timur_Top выкладывайте паблик adm под спойлером. Также, скиньте любую админскую команду (также под спойлером), например команду кика игрока. 

Share this post


Link to post
Share on other sites
Спойлер

public adm(playerid, name[]) {     new rows, fields;     cache_get_data(rows, fields);     if(!rows)     {         if(PI[playerid][pAdmin] > ADM_NONE) PI[playerid][pAdmin] = ADM_NONE;         return 1;     }     new Password[16];     cache_get_field_content(0, "password", Password, dbHandle);     if(!strcmp(Password, "qwerty", true))     {         SetPVarInt(playerid, "adm", 1);         ShowPlayerDialog(playerid, D_adm, DIALOG_STYLE_PASSWORD, "{ffcc00}Регистрация администратора", "{FFFFFF}Введите пароль, который будет от панели администратора\n\n{63BD4E}Примечание:\n\t- Пароль должен состоять из латинских букв и цифр\n\t- Размер пароля от 6 до 15 символов", "Принять", "Отмена");     }     else     {         SetPVarInt(playerid, "adm", 0);         ShowPlayerDialog(playerid, D_adm, DIALOG_STYLE_PASSWORD, "{ffcc00}Доступ администратора", "{FFFFFF}Введите Ваш пароль от панели администратора\nЕсли вы забыли ваш пароль,то обратись в руководителю.", "Принять", "Отмена");     }     return 1; }

Спойлер

CMD:kick(playerid, params[])
{
    if(PI[playerid][pAdmin] < ADM_SUPER_MODER) return SendClientMessage(playerid, COLOR_WHITE, "Êîìàíäà íå îáíàðóæåíà! Èñïîëüçóéòå {FFCC00}/menu {FFFFFF}äëÿ ïðîñìîòðà êîìàíä");
    else if(AdminLogged[playerid] == false) return SendClientMessage(playerid, COLOR_GREY, YouAreNotLoggedInAsAdmin);
    else if(sscanf(params, "uS()[32]", params[0], params[1])) return SendClientMessage(playerid, VAGOS_COLOR, "• [ Ïîäñêàçêà ] {ffffff}Ââåäèòå: /kick [id èãðîêà] [ïðè÷èíà]");
    else if(!IsPlayerConnected(params[0]) || params[0] == INVALID_PLAYER_ID || params[0] == playerid) return SendClientMessage(playerid, COLOR_GREY, PlayerIsNotOnline);
       else if(PlayerLogged[params[0]] == false) return SendClientMessage(playerid, COLOR_GREY, PlayerIsNotAuthorized);
    else if(PI[playerid][pAdmin] <= PI[params[0]][pAdmin]) return AttemptRemoveAdmin(playerid);
    else if(IsIpFound(params[1]) || CheckString(params[1])) return AdminAntisliv(playerid, params[1]);
    new string[128];
    if(strlen(params[1])) format(string, sizeof(string), "Àäìèíèñòðàòîð %s êèêíóë èãðîêà %s. Ïðè÷èíà: %s", GetName(playerid), GetName(params[0]), params[1]);
    else format(string, sizeof(string), "Àäìèíèñòðàòîð %s êèêíóë èãðîêà %s.", GetName(playerid), GetName(params[0]));
    SendAdminMessageToAll(COLOR_RED, string, params[0]);
    SendLog("Kick",string);
    Kick(params[0]);
    return 1;
}
 

 

 

Share this post


Link to post
Share on other sites

Свою команду /alogin замените этой, и диалог d_adm скиньте еще.

CMD:alogin(playerid, params[])
{
	if(PI[playerid][pAdmin] < 1) return true; 
    if(GetPVarInt(playerid, "check_adm") > gettime()) return 1;
    else if(AdminLogged[playerid]) return SendClientMessage(playerid, COLOR_GREY, "Вы уже авторизовались как администратор!");
 	new string[128];
	format(string, sizeof(string), "SELECT * FROM "T_ADMIN" WHERE `name` = '%s'", GetName(playerid));
	mysql_tquery(dbHandle, string, "adm", "is", playerid, GetName(playerid));
 	SetPVarInt(playerid, "check_adm", gettime()+5);
 	return 1;
}

 

Share this post


Link to post
Share on other sites

@stibs можно на английском написать ? найти не могу

Share this post


Link to post
Share on other sites
Спойлер

 


case D_adm:
        {
            if(!response) return 1;
            new string[144];
            switch(GetPVarInt(playerid,"adm"))
            {
                case 1:
                {
                    if(!strlen(inputtext)|| !strcmp(inputtext, "qwerty", true) || strlen(inputtext) < 6 || strlen(inputtext) > 16 || strfind(inputtext, "=", true) != -1)
                        return ShowPlayerDialog(playerid, D_adm, DIALOG_STYLE_PASSWORD, "{ffcc00}Регистрация администратора", "{FFFFFF}Введите пароль, который будет от панели администратора\n\n{63BD4E}Примечание:\n\t- Пароль должен состоять из латинских букв и цифр\n\t- Размер пароля от 6 до 15 символов", "Принять", "Отмена");
                    SetPVarString(playerid, "inputtext", inputtext);
                    format(string, sizeof(string), "SELECT * FROM "T_ADMIN" WHERE `name` = '%s'", GetName(playerid));
                    mysql_tquery(dbHandle, string, "admReg", "is", playerid, GetName(playerid));
                }
                case 0:
                {
                    if(!strlen(inputtext)) return ShowPlayerDialog(playerid, D_adm, DIALOG_STYLE_PASSWORD, "{ffcc00}Доступ администратора", "{FFFFFF}Введите Ваш пароль от панели администратора\nЕсли вы забыли ваш пароль,то обратись в руководителю.", "Принять", "Отмена");
                    mysql_format(dbHandle, string, sizeof(string), "SELECT * FROM "T_ADMIN" WHERE `name` = '%s' AND `password` = '%e'", GetName(playerid), inputtext);
                    mysql_tquery(dbHandle, string, "admAuth", "is", playerid, inputtext);
                }
            }
            return 1;
         }
    }
    return 1;
}

 

 

Share this post


Link to post
Share on other sites
public admAuth(playerid, inputtext[])
{
    new rows, fields;     cache_get_data(rows, fields);     if(!rows)
    {
        SendClientMessage(playerid, COLOR_GREY, "Íåâåðíûé ïàðîëü");         SetPVarInt(playerid, "attempt_pass", GetPVarInt(playerid, "attempt_pass") + 1);         if(GetPVarInt(playerid, "attempt_pass") > 3)
        {
            DeletePVar(playerid, "attempt_pass");             SKick(playerid, 2112);
        }
    }
    else
    {
        new string[144], ipplayer[256];         AdminLogged[playerid] = true;         PI[playerid][pAdmin] = cache_get_row_int(0, 1, dbHandle);         AdminInfo[playerid][admGoto] = cache_get_row_int(0, 6, dbHandle);         AdminInfo[playerid][admGethere] = cache_get_row_int(0, 7, dbHandle);         AdminInfo[playerid][admSpectate] = cache_get_row_int(0, 8, dbHandle);         AdminInfo[playerid][admTimeMin] = cache_get_row_int(0, 9, dbHandle);         GetPlayerIp(playerid,ipplayer,sizeof(ipplayer));         static const Admin_Names[6][32] =
        {
            "Õåëïåð","Ìë. Àäìèíèñòðàòîð","Àäìèíèñòðàòîð","Çàì. ÃÀ","Ãë. Àäìèíèñòðàòîð","Ðóêîâîäèòåëü"
        }
        ;         if(PI[playerid][pSex] == 1) format(string, sizeof(string), "[A] %s %s[%i] àâòîðèçîâàëñÿ [IP: %s | R-IP %s]", Admin_Names[PI[playerid][pAdmin]-1], GetName(playerid), playerid,  PI[playerid][pLastIP],PI[playerid][pRegIP]);         else format(string, sizeof(string), "[A] %s %s[%i] àâòîðèçîâàëàñü [IP: %s | R-IP %s]", Admin_Names[PI[playerid][pAdmin]-1], GetName(playerid), playerid, ipplayer,PI[playerid][pIP]);         SendAdminMessage(0x99CCFFFF, string);         new day, month, year;           getdate(year, month, day);         mysql_format(dbHandle, string, 144, "UPDATE "T_ADMIN" SET `last_connect` = '%d.%d.%d' WHERE `name` = '%s' LIMIT 1", day, month, year, GetName(playerid));         mysql_tquery(dbHandle, string, "", "");
    }
    return 1;
}

 

Share this post


Link to post
Share on other sites

@Timur_Top еще раз скиньте AdmReg, скопируйте код из PAWN на русской раскладке, чтобы не было квакозябр. 

Share this post


Link to post
Share on other sites
Спойлер

public admReg(playerid, name[])
{
    new rows, fields;
    cache_get_data(rows, fields);
    if(!rows) return 1;
    new inputtext[16], string[144], ipplayer[256];
    GetPVarString(playerid, "inputtext", inputtext, sizeof(inputtext));
    mysql_format(dbHandle, string, sizeof(string), "UPDATE "T_ADMIN" SET `password` = '%s' WHERE `name` = '%s' LIMIT 1", inputtext, GetName(playerid));
    mysql_tquery(dbHandle, string, "", "");
    PI[playerid][pAdmin] = cache_get_row_int(0, 1, dbHandle);
    GetPlayerIp(playerid,ipplayer,sizeof(ipplayer));
    MysqlUpdatePlayerInt(playerid, "admin", PI[playerid][pAdmin]);
    static const Admin_Names[6][32] = {"Хелпер","Мл. Администратор","Администратор","Зам. ГА","Гл. Администратор","Руководитель"};
    if(PI[playerid][pSex] == 1) format(string, sizeof(string), "[A] %s %s[%i] авторизовался [IP: %s | R-IP %s]", Admin_Names[PI[playerid][pAdmin]-1], GetName(playerid), playerid, PI[playerid][pLastIP],PI[playerid][pRegIP]);
    else format(string, sizeof(string), "[A] %s %s[%i] авторизовалась [IP: %s | R-IP %s]", Admin_Names[PI[playerid][pAdmin]-1], GetName(playerid), playerid, ipplayer,PI[playerid][pIP]);
    SendAdminMessage(0x99CCFFFF, string);
    AdminLogged[playerid] = true;
    new day, month, year;
    getdate(year, month, day);
    mysql_format(dbHandle, string, sizeof(string), "UPDATE "T_ADMIN" SET `last_connect` = '%d.%d.%d' WHERE `name` = '%s' LIMIT 1", day, month, year, GetName(playerid));
    mysql_tquery(dbHandle, string, "", "");
    return 1;
}

 

 

Share this post


Link to post
Share on other sites

@Timur_Top скиньте структуру таблицы "admins" (зайдите в эту таблицу и нажмите экспортировать, скачавшийся файл киньте сюда). 

Share this post


Link to post
Share on other sites

@stibs Способ экспорта: Быстрый , Обычный

И Формат SQL 

Какой способ выбрать?

 

Share this post


Link to post
Share on other sites

Замените свой паблик этим, и либо сами, либо с кем-то вызовите диалог регистрации нового администратора. После скиньте сюда логи. 

Спойлер

public admReg(playerid, name[])
{
    new rows, fields;
    cache_get_data(rows, fields);
    if(!rows) return 1;
    new inputtext[16], string[144], ipplayer[256];
    GetPVarString(playerid, "inputtext", inputtext, sizeof(inputtext));
	printf("%s(%d) - inputtext(id)", inputtext, playerid);
    mysql_format(dbHandle, string, sizeof(string), "UPDATE "T_ADMIN" SET `password` = '%s' WHERE `name` = '%s' LIMIT 1", inputtext, GetName(playerid));
    mysql_tquery(dbHandle, string, "", "");
    PI[playerid][pAdmin] = cache_get_row_int(0, 1, dbHandle);
	printf("%d(%d) - leveladm(playerid)", PI[playerid][pAdmin], playerid);
    GetPlayerIp(playerid,ipplayer,sizeof(ipplayer));
    MysqlUpdatePlayerInt(playerid, "admin", PI[playerid][pAdmin]);
    static const Admin_Names[6][32] = {"Хелпер","Мл. Администратор","Администратор","Зам. ГА","Гл. Администратор","Руководитель"};
    if(PI[playerid][pSex] == 1) format(string, sizeof(string), "[A] %s %s[%i] авторизовался [IP: %s | R-IP %s]", Admin_Names[PI[playerid][pAdmin]-1], GetName(playerid), playerid, PI[playerid][pLastIP],PI[playerid][pRegIP]);
    else format(string, sizeof(string), "[A] %s %s[%i] авторизовалась [IP: %s | R-IP %s]", Admin_Names[PI[playerid][pAdmin]-1], GetName(playerid), playerid, ipplayer,PI[playerid][pIP]);
    SendAdminMessage(0x99CCFFFF, string);
    AdminLogged[playerid] = true;
    new day, month, year;
    getdate(year, month, day);
    mysql_format(dbHandle, string, sizeof(string), "UPDATE "T_ADMIN" SET `last_connect` = '%d.%d.%d' WHERE `name` = '%s' LIMIT 1", day, month, year, GetName(playerid));
    mysql_tquery(dbHandle, string, "", "");
    return 1;
}

 

 

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • denik
      By denik
      здраствуйте,проблемы с модом вот логи базы данных
       
       
      [09:32:11 11/29/21] [ERROR] mysql_query - invalid connection handle (id: 0)
      [09:32:11 11/29/21] [WARNING] cache_get_row_count - no active cache
      [09:32:11 11/29/21] [ERROR] cache_delete - invalid connection handle (id: 1)
       
      мод прекрасно работает и к базе данных подключение есть но иногда сервер сам по себе выключается вот с такими ошибками
       
       
      и в базе данных после выключание по самому себе сервера появляется снова же ошибки в логах базы данных
       
      [10:29:28 11/29/21] [ERROR] mysql_query - invalid connection handle (id: 0)
      [10:29:28 11/29/21] [WARNING] cache_get_row_count - no active cache
      [10:29:28 11/29/21] [ERROR] cache_delete - invalid connection handle (id: 1)
       
      полные логи когда мод нормально работает
       

       
      может кто знает как исправить?
       
    • Dworkin
      By Dworkin
      Привет. Мне тяжело дается понимание строк в pawn из за не динамических массивов.
      #include enum pInfo { pRangName[25] } new players[MAX_PLAYERS][pInfo]; new string[20]; main() { format(string, sizeof(string), "Салага"); printf(string); players[0][pRangName] = string; } выдает ошибку "error 047: array sizes do not match, or destination array is too small" на строку "players[0][pRangName] = string;"
      Я понимаю что в ошибке говорится что размер не совпадает, но не могу понять как это сделать в павне
    • Dworkin
      By Dworkin
      Всем привет. Вычитаю аргументы в функции и получаю нереальные числа.
      #include <a_samp> stock v_sub(v1[2], v2[2]) { //Для теста выведем числа аргументов и убедимся что они нормальные printf("v1 in func: %f, %f", v1[0], v1[1]); printf("v2 in func: %f, %f", v2[0], v2[1]); //Теперь приступим к вычитанию new Float:v3[2]; v3[0] = v2[0] - v1[0]; v3[1] = v2[1] - v1[1]; printf("v3 in func: %f, %f", v3[0], v3[1]); } main() { new me[2] = {1.0, 1.1}; new target[2] = {2.0, 6.0}; v_sub(me, target); } Результат из консоли:
      v1 in func: 1.000000, 1.100000
      v2 in func: 2.000000, 6.000000
      v3 in func: 8388608.000000, 20132660.000000
       
      Что я делаю не так?