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

Доступ к кмд

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

ZSCRIPTER

Привет. есть такая проблема с командой

CMD:v(playerid,params[]){
    if(antiflood[playerid] > 0) return SendClientMessage(playerid, COLOR_WARNING,"Не флуди!");
    antiflood[playerid]++;
    if(PLAYER_DATA[playerid][data_LOGGED] == false) return SendClientMessage(playerid,COLOR_WARNING,"Вы не авторизованы на сервере!");
    if(PLAYER_DATA[playerid][data_VIP] < 1, PLAYER_DATA[playerid][data_ADMLVL] < 1) return SendClientMessage(playerid, -1, "Вам не доступна данная функция");
if(sscanf(params,"s[100]",params[0])) return SendClientMessage(playerid,COLOR_WARNING,"Используйте: /v [текст]");
new string[145], adm_lvl[30];
switch(PLAYER_DATA[playerid][data_ADMLVL])
  {
    case 0: adm_lvl = "{007FFF}[VIP]";
    case 1: adm_lvl = "{FF0001}[Администратор]";
    case 2: adm_lvl = "{FF0001}[Администратор]";
    case 3: adm_lvl = "{FF0001}[Администратор]";
    case 4: adm_lvl = "{FF0001}[Администратор]";
    case 5: adm_lvl = "{FF0001}[Администратор]";
    case 6: adm_lvl = "{FF0001}[Администратор]";
    case 7: adm_lvl = "{FF0001}[Администратор]";
    case 8: adm_lvl = "{FF0001}[Администратор]";
    case 9: adm_lvl = "{FF0001}[Администратор]";
    case 10: adm_lvl = "{FF0001}[Администратор]";
}
    format(string, sizeof(string), "%s{F0F8FF}: %s",adm_lvl,params[0]);
    SendVipchatMessage(0xFF5204FF, string);
    return true;
}

доступ к команде есть для випа, я сделал ище и для админов но для випа доступ есть далее а для админов все ище нету

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


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

Сложные условия пишутся с помощью логических операторов, а не запятых

 if(PLAYER_DATA[playerid][data_VIP] < 1 && PLAYER_DATA[playerid][data_ADMLVL] < 1) return SendClientMessage(playerid, -1, "Вам не доступна данная функция");

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


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

@16Shadows,не в том дело, я уже менял на && и на || не работает, вот код

CMD:hr(playerid,params[])
{
    if(antiflood[playerid] > 0) return SendClientMessage(playerid, COLOR_WARNING,"Не флуди!");
    antiflood[playerid]++;
    if(PLAYER_DATA[playerid][data_LOGGED] == false) return SendClientMessage(playerid,COLOR_WARNING,"Вы не авторизованы на сервере!");
    if(PLAYER_DATA[playerid][data_SUPPORTLVL] < 1 || PLAYER_DATA[playerid][data_ADMLVL] < 1) return SendClientMessage(playerid, -1, "Вам не доступна данная функция");
    if(sscanf(params,"s[100]",params[0])) return SendClientMessage(playerid,COLOR_WARNING,"Используйте: /hr [текст]");
    new string[256], s_lvl[30];
    switch(PLAYER_DATA[playerid][data_ADMLVL])
    {
        case 0: s_lvl = "Агент Поддержки";
        case 1: s_lvl = "Администратор";
        case 2: s_lvl = "Администратор";
        case 3: s_lvl = "Администратор";
        case 4: s_lvl = "Администратор";
        case 5: s_lvl = "Администратор";
        case 6: s_lvl = "Администратор";
        case 7: s_lvl = "Администратор";
        case 8: s_lvl = "Администратор";
        case 9: s_lvl = "Администратор";
        case 10: s_lvl = "Администратор";
    }
    if(PLAYER_DATA[playerid][data_ADMLVL] < 1)
    {
    format(string, sizeof(string), "%s: %s",s_lvl,params[0]);
	SendSupportMessage(0xFF5204FF, string);
    }
    else if(PLAYER_DATA[playerid][data_SUPPORTLVL] == 1)
    {
	format(string, sizeof(string), "%s #%d: %s",s_lvl,PLAYER_DATA[playerid][data_SUPPORTID],params[0]);
	SendSupportMessage(0xFF5204FF, string);
    }
    return true;
}

CMD:v(playerid,params[])
{
    if(antiflood[playerid] > 0) return SendClientMessage(playerid, COLOR_WARNING,"Не флуди!");
    antiflood[playerid]++;
    if(PLAYER_DATA[playerid][data_LOGGED] == false) return SendClientMessage(playerid,COLOR_WARNING,"Вы не авторизованы на сервере!");
    if(PLAYER_DATA[playerid][data_ADMLVL] < 1 && PLAYER_DATA[playerid][data_VIP] == 1) return true;
	if(sscanf(params,"s[100]",params[0])) return SendClientMessage(playerid,COLOR_WARNING,"Используйте: /v [текст]");
	new string[145], adm_lvl[30];
	switch(PLAYER_DATA[playerid][data_ADMLVL])
 	{
	    case 0: adm_lvl = "{007FFF}[VIP]";
	    case 1: adm_lvl = "{FF0001}[Администратор]";
	    case 2: adm_lvl = "{FF0001}[Администратор]";
	    case 3: adm_lvl = "{FF0001}[Администратор]";
	    case 4: adm_lvl = "{FF0001}[Администратор]";
	    case 5: adm_lvl = "{FF0001}[Администратор]";
	    case 6: adm_lvl = "{FF0001}[Администратор]";
	    case 7: adm_lvl = "{FF0001}[Администратор]";
	    case 8: adm_lvl = "{FF0001}[Администратор]";
	    case 9: adm_lvl = "{FF0001}[Администратор]";
	    case 10: adm_lvl = "{FF0001}[Администратор]";
	}
    format(string, sizeof(string), "%s{F0F8FF}: %s",adm_lvl,params[0]);
    SendVipchatMessage(0xFF5204FF, string);
    return true;
} 

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

stock SendSupportMessage(color, text[])
{
 	for(new i = 0; i < MAX_PLAYERS; i++)
	{
	    if(!IsPlayerConnected(i)) continue;
		if(PLAYER_DATA[i][data_SUPPORTLVL] >= 1 && PLAYER_DATA[i][data_ADMLVL] >= 1) SendClientMessage(i, color, text);
	}
	return true;
}

stock SendVipchatMessage(color, text[])
{
 	for(new i = 0; i < MAX_PLAYERS; i++)
	{
	    if(!IsPlayerConnected(i)) continue;
		if(PLAYER_DATA[i][data_ADMLVL] >= 1 && PLAYER_DATA[i][data_VIP] >= 1) SendClientMessage(i, color, text);
	}
	return true;
} 

Вип чат тепер работает но хелпер чат далее отказывается

CMD:hr(playerid,params[])
{
    if(antiflood[playerid] > 0) return SendClientMessage(playerid, COLOR_WARNING,"Не флуди!");
    antiflood[playerid]++;
    if(PLAYER_DATA[playerid][data_LOGGED] == false) return SendClientMessage(playerid,COLOR_WARNING,"Вы не авторизованы на сервере!");
    if(PLAYER_DATA[playerid][data_SUPPORTLVL] < 1 && PLAYER_DATA[playerid][data_ADMLVL] < 1) return true;
    if(sscanf(params,"s[100]",params[0])) return SendClientMessage(playerid,COLOR_WARNING,"Используйте: /hr [текст]");
    new string[256], s_lvl[30];
    switch(PLAYER_DATA[playerid][data_ADMLVL])
    {
        case 0: s_lvl = "Агент Поддержки";
        case 1: s_lvl = "Администратор";
        case 2: s_lvl = "Администратор";
        case 3: s_lvl = "Администратор";
        case 4: s_lvl = "Администратор";
        case 5: s_lvl = "Администратор";
        case 6: s_lvl = "Администратор";
        case 7: s_lvl = "Администратор";
        case 8: s_lvl = "Администратор";
        case 9: s_lvl = "Администратор";
        case 10: s_lvl = "Администратор";
    }
    if(PLAYER_DATA[playerid][data_ADMLVL] < 1)
    {
    format(string, sizeof(string), "%s: %s",s_lvl,params[0]);
	SendSupportMessage(0xFF5204FF, string);
    }
    else if(PLAYER_DATA[playerid][data_SUPPORTLVL] == 1)
    {
	format(string, sizeof(string), "%s #%d: %s",s_lvl,PLAYER_DATA[playerid][data_SUPPORTID],params[0]);
	SendSupportMessage(0xFF5204FF, string);
    }
    return true;
}
stock SendVipchatMessage(color, text[])
{
 	for(new i = 0; i < MAX_PLAYERS; i++)
	{
	    if(!IsPlayerConnected(i)) continue;
		if(PLAYER_DATA[i][data_VIP] >= 1) SendClientMessage(i, color, text);
		if(PLAYER_DATA[i][data_ADMLVL] >= 1) SendClientMessage(i, color, text);
	}
	return true;
}

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


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

@AZRP, если у вас администратор - не изменная константа(в смысле везде от 1 до 10 ранг администратор.) почему бы не упростить ? case 1..10: ? 

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


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

@Vegas,уже упростил, токо что-же делать,не видет не пишет в чат не работает кмд 

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


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

Вы хотя бы понимаете, что делаете?

&& - логический оператор И. Вы его используете в стоках отправки сообщения, поэтому выполнятся условие будет, когда И первая, И вторая проверки верны.

|| - логический оператор ИЛИ. Когда одна из проверок верна, всё условие считается верным.

Вы бы хоть позанимались для начала дискретной математикой немного, а потом начинали писать скрипты.

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


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

@16Shadows, да я так то знаю что где как, у меня вип уже работает нормально, я с хелпер чатом уже просто замахался, что токо не пробовал всеравно не работает 

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


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

По Вам не видно, что Вы знаете "что где как", т.к. даже после объяснения не можете понять, что логический оператор && нужно заменить на логический оператор ||

if(PLAYER_DATA[i][data_SUPPORTLVL] >= 1 || PLAYER_DATA[i][data_ADMLVL] >= 1) SendClientMessage(i, color, text);

Ещё и какие-то бредовые условия после структуры case в самой команде hr - если уровень администратора меньше одного (что у Вас подразумевает хелпера), то выполнить такой набор команд. Иначе, если уровень хелпера игрока равен одному (куда структура дойдёт только для администраторов, для которых это условие неверно), то выполнить другой набор команд.

Изменено пользователем 16Shadows

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


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

@16Shadows, да незнаю,я как бы понимаю что нужно но не могу сделать что нужно. можеш помоч?

CMD:hr(playerid,params[])
{
    if(antiflood[playerid] > 0) return SendClientMessage(playerid, COLOR_WARNING,"Не флуди!");
    antiflood[playerid]++;
    if(PLAYER_DATA[playerid][data_LOGGED] == false) return SendClientMessage(playerid,COLOR_WARNING,"Вы не авторизованы на сервере!");
    if(PLAYER_DATA[playerid][data_SUPPORTLVL] < 1 || PLAYER_DATA[playerid][data_ADMLVL] < 1) return true;
    if(sscanf(params,"s[100]",params[0])) return SendClientMessage(playerid,COLOR_WARNING,"Используйте: /hr [текст]");
    new string[256], s_lvl[30];
    switch(PLAYER_DATA[playerid][data_ADMLVL])
    {
        case 0: s_lvl = "Агент Поддержки";
        case 1,2,3,4,5,6,7,8,9,10: s_lvl = "Администратор";
    }
    if(PLAYER_DATA[playerid][data_SUPPORTLVL] == 1)// тут все работает
    {
    format(string, sizeof(string), "%s #%d: %s",s_lvl,PLAYER_DATA[playerid][data_SUPPORTID],params[0]);
SendSupportMessage(0xFF5204FF, string);
    }
    else if(PLAYER_DATA[playerid][data_ADMLVL] < 1)//а тут не хочет
    {
format(string, sizeof(string), "%s: %s",s_lvl,params[0]);
SendSupportMessage(0xFF5204FF, string);
    }
    return true;
}
Изменено пользователем AZRP

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


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

Ну то есть Вас не смущает, что команда не работает для игроков с data_ADMLVL < 1, но потом Вы в ней делаете проверку data_ADMLVL < 1?

Изменено пользователем 16Shadows

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


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

@16Shadows,тоесть не работает?

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


Ссылка на сообщение
Поделиться на другие сайты
16Shadows
CMD:hr(playerid,params[])
{
    if(antiflood[playerid] > 0) return SendClientMessage(playerid, COLOR_WARNING,"Не флуди!");
    antiflood[playerid]++;
    if(PLAYER_DATA[playerid][data_LOGGED] == false) return SendClientMessage(playerid,COLOR_WARNING,"Вы не авторизованы на сервере!");
    if(PLAYER_DATA[playerid][data_SUPPORTLVL] < 1 || PLAYER_DATA[playerid][data_ADMLVL] < 1) return true;
    if(sscanf(params,"s[100]",params[0])) return SendClientMessage(playerid,COLOR_WARNING,"Используйте: /hr [текст]");
    new string[256], s_lvl[30];
    switch(PLAYER_DATA[playerid][data_ADMLVL])
    {
        case 0: s_lvl = "Агент Поддержки";
        case 1,2,3,4,5,6,7,8,9,10: s_lvl = "Администратор";
    }
    if(PLAYER_DATA[playerid][data_SUPPORTLVL] == 1)// тут все работает
    {
    format(string, sizeof(string), "%s #%d: %s",s_lvl,PLAYER_DATA[playerid][data_SUPPORTID],params[0]);
SendSupportMessage(0xFF5204FF, string);
    }
    else if(PLAYER_DATA[playerid][data_ADMLVL] >= 1)//теперь хочет
    {
format(string, sizeof(string), "%s: %s",s_lvl,params[0]);
SendSupportMessage(0xFF5204FF, string);
    }
    return true;
}

Советую почитать Вам пару книг по логическому мышлению, прежде чем заниматься скриптингом. Если не станет лучше, то не судьба.

  • Like 1

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


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

@16Shadows,всеровно не работает(, я уже как только не пробовал написать ет все 


я уже в админ и  == ставил, чтобы токо 1 лвл работал, но всеровно не работает

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


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

@AZRP, с такими условиями ничего работать и не будет, это не лотерея символов, какой поставишь мб повезет. Я понимаю, что тут конечно же помогут, но самому прочитать, изучить, написать самостоятельно нельзя? Это все понятно, но мне интересно, что будет дальше, если основы не знать?

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


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
Авторизация  

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

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

×

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

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