PDA

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



Kurbanoff
24.01.2016, 11:34
Всем привет. Сделал простенькую команду , проверяю не работает у администраторов , а у обычных работает


if(strcmp(cmd, "/welcome", true) == 0)
{
if(PlayerInfo[playerid][pAdmin] >= 1)
{
new arank[64];
arank = IsAdminName(PlayerInfo[playerid][pAdmin],PlayerInfo[playerid][pHelper]);
format(string, sizeof(string), "%s %s: желает вам приятной игры!", arank, PN(playerid));
SendClientMessageToAll(COLOR_YELLOW, string);
}
else SendClientMessage(playerid, COLOR_GREY, "[!] Вы не уполномочены использовать эту команду!");
return 1;
}

Фиксируйте ошибку , и учите меня , на каком строчке моя ошибка

L0ndl3m
24.01.2016, 12:04
Команда должна работать у администраторов. Код верный. Но есть кое-что нелогичное.




Для функций, выполняющих проверку чего-либо, следует использовать префикс Is.
Примеры:


// из стандартных функций SA:MP
native IsPlayerAdmin(playerid);
native IsPlayerConnected(playerid);
native IsPlayerInAnyVehicle(playerid);

// примеры пользовательских функций
stock bool:IsHouseFree(houseid);
stock IsRPNick (http://pro-pawn.ru/showthread.php?7528)(name[]); // Название кликабельно.


Префиксы Get/Set должны использоваться в названиях функций, получающих доступ к какому-либо атрибуту.
Примеры:


// из стандартных функций SA:MP
native GetPlayerPos(playerid, &Float:x, &Float:y, &Float:z);
native SetPlayerPos(playerid, Float:x, Float:y, Float:z);
native GetVehicleHealth(vehicleid, &Float:health);
native SetVehicleHealth(vehicleid, Float:health);

// примеры пользовательских функций
stock GetHousePrice(houseid);
stock SetHousePrice(houseid, price);
stock GetBusinessFee(businessid);
stock SetBusinessFee(businessid, fee);




Выложите функцию "IsAdminName".

Kurbanoff
24.01.2016, 12:15
stock IsAdminNames(Helper, Admin)
{
if (Helper > 0 ) return Helper;
else if (Admin > 0)
{
if (Admin >=7777) Admin = 10;
return Admin + 3;
}
else return 0;
}
#define IsAdminName(%1,%2) AdminNames[IsAdminNames(%1,%2)]



new AdminNames[14][64] = {"Неизвестно", "Мл.Хелпер","Хелпер","Гл.Хелпер",
"Пом.Модера", "Модератор", "Супермодер", "Гл.Модер",
"Пом.Админа", "РП Админ", "Админ", "Ст.Админ",
"Зам.Гл.Админ", "Главный Администратор"};

Как я понимаю stock IsAdminNames(Helper, Admin) привязана к переменную new AdminNames[14][64]

L0ndl3m
24.01.2016, 16:15
if(strcmp(cmdtext, "/welcome", true) == 0)
{
static const
rank_names[14][22] =
{
"Мл.Хелпер",
"Хелпер",
"Гл.Хелпер",
"Пом.Модера",
"Модератор",
"Супермодер",
"Гл.Модер",
"Пом.Админа",
"РП Админ",
"Админ",
"Ст.Админ",
"Зам.Гл.Админ",
"Главный Администратор"
};

new
pos =
(1 <= PlayerInfo[playerid][pAdmin] <= 10)
? PlayerInfo[playerid][pAdmin] + 2
: (1 <= PlayerInfo[playerid][pHelper] <= 4)
? PlayerInfo[playerid][pHelper] - 1
: -1;

if(pos != -1)
{
format(string, sizeof(string), "%s %s: желает вам приятной игры!", rank_names[pos], PN(playerid));
SendClientMessageToAll(COLOR_YELLOW, string);
}
else
SendClientMessage(playerid, COLOR_GREY, "[!] Вы не уполномочены использовать эту команду!");

return 1;
}


Макрос "IsAdminName" и сток "IsAdminNames" можете удалить, если больше нигде их не используете.

Kurbanoff
24.01.2016, 16:23
Макрос "IsAdminName" и сток "IsAdminNames" можете удалить, если больше нигде их не используете.
Извините но я до сегодняшнего дня использую этот макрос "IsAdminNames" с ним удобнее , и во всех проверках где нужно название рангов Администратора я использую этот код


new arank[64];
arank = IsAdminName(PlayerInfo[playerid][pAdmin],PlayerInfo[playerid][pHelper]);




if(strcmp(cmdtext, "/welcome", true) == 0)
{
static const
rank_names[14][22] =
{
"Мл.Хелпер",
"Хелпер",
"Гл.Хелпер",
"Пом.Модера",
"Модератор",
"Супермодер",
"Гл.Модер",
"Пом.Админа",
"РП Админ",
"Админ",
"Ст.Админ",
"Зам.Гл.Админ",
"Главный Администратор"
};

new
pos =
(1 <= PlayerInfo[playerid][pAdmin] <= 10)
? PlayerInfo[playerid][pAdmin] + 2
: (1 <= PlayerInfo[playerid][pHelper] <= 4)
? PlayerInfo[playerid][pHelper] - 1
: -1;

if(pos != -1)
{
format(string, sizeof(string), "%s %s: желает вам приятной игры!", rank_names[pos], PN(playerid));
SendClientMessageToAll(COLOR_YELLOW, string);
}
else
SendClientMessage(playerid, COLOR_GREY, "[!] Вы не уполномочены использовать эту команду!");

return 1;
}

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

Blood
24.01.2016, 21:18
по-пробуй так


if(strcmp(cmd, "/welcome", true) == 0)
{
if(PlayerInfo[playerid][pAdmin] == 0) return SendClientMessage(playerid, COLOR_GREY, "[!] Вы не уполномочены использовать эту команду!");
new arank[64];
arank = IsAdminName(PlayerInfo[playerid][pAdmin],PlayerInfo[playerid][pHelper]);
format(string, sizeof(string), "%s %s: желает вам приятной игры!", arank, PN(playerid));
SendClientMessageToAll(COLOR_YELLOW, string);
return 1;
}